package com.levi.juc.singlemodel;

import java.lang.reflect.Constructor;

/**
 * 单例模式会被反射给破坏
 * 枚举类不会被反射破坏
 */
public enum EnumSingle {
    INSTANSE;

    public EnumSingle getInstanse() {
        return INSTANSE;
    }
}

class Test{
    public static void main(String[] args) throws Exception{
        EnumSingle instanse = EnumSingle.INSTANSE;
        Constructor<EnumSingle> declaredConstructor = EnumSingle.class.getDeclaredConstructor(null);
        /**
         *  执行无参构造方法会报错    NoSuchMethodException
         *  用jad把class文件编译成原始的java文件会发现枚举类的构造方法有两个参数
         */
        EnumSingle enumSingle = declaredConstructor.newInstance();
        System.out.println(instanse);
        System.out.println(enumSingle);

    }
}